// Copyright 2023 The Inspektor Gadget authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package prometheus

import (
	sdkmetric "go.opentelemetry.io/otel/sdk/metric"
)

// histogramViewFunc returns a view function for a histogram instrument.
// It allows using custom aggregation (e.g histogram buckets) for a given instrument.
func (p *Prometheus) histogramViewFunc() sdkmetric.View {
	return func(instrument sdkmetric.Instrument) (sdkmetric.Stream, bool) {
		if instrument.Kind != sdkmetric.InstrumentKindHistogram {
			return sdkmetric.Stream{}, false
		}
		bc, ok := p.bucketConfigs[instrument.Name]
		if !ok {
			return sdkmetric.Stream{}, false
		}
		return sdkmetric.Stream{
			Name:        instrument.Name,
			Description: instrument.Description,
			Unit:        instrument.Unit,
			Aggregation: sdkmetric.AggregationExplicitBucketHistogram{
				Boundaries: bc.buckets(),
			},
		}, true
	}
}
